package com.core.enums;

import com.alibaba.fastjson.annotation.JSONType;
import com.core.enums.annotation.StringEnumJSONType;
import com.core.enums.serializer.StringEnumSerializer;

/**
 * @author gang
 */

@StringEnumJSONType
public interface StringEnum extends SerializableEnum {
    /**
     * @return 枚举对应的值
     */
    String getValue();

    /**
     * intEnum从值变枚举的通用方法
     *
     * @param clazz 枚举的类型
     * @param value 值
     * @param <T>   继承于StringEnum的枚举
     * @return 映射结果
     */
    static <T> T of(Class<T> clazz, String value) {
        return of(clazz, value, null);
    }

    static <T> T of(Class<T> clazz, String value, T defaultValue) {
        StringEnum[] enums = (StringEnum[]) clazz.getEnumConstants();
        if (enums == null) {
            return defaultValue;
        }
        for (StringEnum e : enums) {
            if (e.getValue().equals(value)) {
                return (T) e;
            }
        }
        return defaultValue;
    }
}
